外观
2024年3月 GESP C++ 三级真题解析
一、单选题(每题2分,共30分)
单选题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | D | C | C | B | C | C | A | C | C | C | D | A | B | C | C |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 整数 -5 的 16 位补码表示是()。
A. 1005
B. 1006
C. FFFA
D. FFFB
查看解析
答案:D
考纲知识点: 补码表示
解析:
-5 的 16 位补码 = 0xFFFB。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 若 -2 的 16 位补码为 FFFE,则 -4 的十六进制是()。
A. FF04
B. FFFA
C. FFFC
D. FFFH
查看解析
答案:C
考纲知识点: 补码计算
解析:
-4 的补码 = -2 的补码减 2 → 0xFFFC。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 下面 C++ 代码执行后输出是()。
cpp
int main() {
cout << (3 | 16) << endl;
return 0;
}1
2
3
4
2
3
4
A. 3
B. 16
C. 19
D. 48
查看解析
答案:C
考纲知识点: 位运算
解析:
3 | 16 = 0b00011 | 0b10000 = 0b10011 = 19。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 定义 int x = -5;,则执行 cout << (x == (x << 1 >> 1)) 输出是()。
A. 0
B. 1
C. -5
D. 5
查看解析
答案:B
考纲知识点: 位移与符号扩展
解析:
左移1位再算术右移1位,符号位保留,值不变,结果为1(true)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 已知字符‘0’的ASCII码为48,执行后输出是()。
cpp
string s = "316";
int x = 0;
for (int i = 0; i < s.length(); i++)
x += s[i];
cout << x << endl;1
2
3
4
5
2
3
4
5
A. 10
B. 58
C. 154
D. 316
查看解析
答案:C
考纲知识点: 字符与整数转换
解析:
'3'+'1'+'6' = 51+49+54 = 154。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面代码执行后数组中大于0的数的特征是()。
cpp
int a[20];
for (int i = 0; i < 20; i++) a[i] = i+1;
for (int i = 0; i < 20; i++)
if ((a[i]%2) && (a[i]%3)) a[i] = 0;1
2
3
4
2
3
4
A. 2 的倍数
B. 3 的倍数
C. 能被 2 或 3 整除的数
D. 能被 2 和 3 同时整除的数
查看解析
答案:C
考纲知识点: 逻辑与条件判断
解析:
条件等价于“不能被 2 或 3 整除”,故保留的是能被 2 或 3 整除的数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面代码输出的第一个数是()。
cpp
int a[20];
for (int i = 0; i < 20; i++) a[i] = i+1;
for (int i = 20; i > 0; i--) cout << a[i-1] << " ";1
2
3
2
3
A. 20
B. 19
C. 1
D. 不确定
查看解析
答案:A
考纲知识点: 数组倒序输出
解析:
倒序输出,第一个元素是 a[19] = 20。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 在横线处填写(),使输出为 GESPISINTERESTING。
cpp
string str = "gEsP is Interesting";
for (int i = 0; i < str.length(); i++)
if (str[i] >= 'a' && str[i] <= 'z')
________;
cout << str << endl;1
2
3
4
5
2
3
4
5
A. str[i] += 'a'-'A'
B. str[i] += 20
C. str[i] += 'A'-'a'
D. 无法实现
查看解析
答案:C
考纲知识点: 大小写转换
解析:
将小写字母转大写字母需减去32('A'-'a' = -32)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 统计单词数的代码输出是()。
cpp
string str = "gEsP is Interesting";
int nwords = 1;
for (int i = 0; i < str.length(); i++)
if (str[i] == ' ') {
nwords++;
while (str[++i] == ' ');
}
cout << nwords << endl;1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
A. 1
B. 2
C. 3
D. 4
查看解析
答案:C
考纲知识点: 字符串处理
解析: 三个单词:"gEsP"、"is"、"Interesting"。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 以下字符字面量码值最大的是()。
A. 100
B. 075
C. 0x70
D. 0x60
查看解析
答案:C
考纲知识点: 字面量进制转换
解析: 100=100,075=61,0x70=112,0x60=96。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 下面程序执行结果是()。
cpp
int a[20], cnt = 0;
for (int i = 0; i < 20; i++) a[i] = i+1;
for (int i = 2; i < 20; i++)
if ((a[i-1] + a[i-2]) % 3 == 0) cnt++;
cout << cnt << endl;1
2
3
4
5
2
3
4
5
A. 5
B. 6
C. 10
D. 12
查看解析
答案:D
考纲知识点: 斐波那契数列模3
解析: 统计相邻两项和模3为0的次数,共12次。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 字符数组 char str[20] = {'G','E','S','P'} 的字符串长度是()。
A. 4
B. 5
C. 19
D. 20
查看解析
答案:A
考纲知识点: 字符串长度
解析: 显式初始化4个字符,无终止符,长度4。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 设 int a = 3, b = 16,则 a|b 与 a+b 的关系是()。
A. 大于
B. 等于
C. 小于
D. 等于或小于
查看解析
答案:B
考纲知识点: 位运算与加法
解析:
3 | 16 = 19,3 + 16 = 19,两者相等。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 华为手表上的“鸿蒙”是()。
A. 小程序
B. 计时器
C. 操作系统
D. 神话人物
查看解析
答案:C
考纲知识点: 操作系统概念
解析:
鸿蒙是华为自研的分布式操作系统。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 王选先生的重大贡献是()。
A. 制造自动驾驶汽车
B. 创立培训学校
C. 发明汉字激光照排系统
D. 成立方正公司
查看解析
答案:C
考纲知识点: 计算机历史
解析:
王选主导研发汉字激光照排系统,实现印刷革命。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | × | × | × | × | × | √ | × | √ | √ | √ |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 任意整数 a 的二进制反码与补码都有 1 位不同。
查看解析
答案:×
考纲知识点: 反码与补码
解析: 反码与补码仅符号位可能相同;只有负数补码比反码多1,零值相同。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 对 int a=3,执行 a<<2 将把 2 输出到 a 中。
查看解析
答案:×
考纲知识点: 位运算
解析:a<<2 是位移表达式,结果为 12,不会把 2 存入 a。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 下面代码采用穷举法计算 1~100 累加和。
cpp
int main(){
int sum = 0;
for(int i = 1; i <= 100; i++) sum += i;
cout << sum << endl;
}1
2
3
4
5
2
3
4
5
查看解析
答案:×
考纲知识点: 算法概念
解析: 这是迭代求和,穷举法需枚举所有可能解,此处不适用。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. int a; (a<<2>>2) 一定等于 a。
查看解析
答案:×
考纲知识点: 位移与溢出
解析: 若左移溢出,再右移无法恢复原值。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. (01 << 1) == 100 的执行结果是 100。
查看解析
答案:×
考纲知识点: 字面量进制
解析: 01 是八进制 1,左移 1 得 2,不等于 100(十进制)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 执行 str.find("s") 将输出 2。
查看解析
答案:√
考纲知识点: 字符串查找
解析: 字符串 "gEsP is Interesting" 中第一个 's' 位于索引 2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 字符数组大小可随时调整。
查看解析
答案:×
考纲知识点: 数组特性
解析: C++ 数组大小在定义时确定,不可动态调整。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 可用简单循环找出数组最小值。
查看解析
答案:√
考纲知识点: 基础算法
解析: 遍历数组即可线性时间求最小值。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. WIFI 盒子具有路由器功能。
查看解析
答案:√
考纲知识点: 网络设备
解析: 家用 WIFI 盒子通常集成路由功能。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 任何 for 循环可转换为等价 while 循环。
查看解析
答案:√
考纲知识点: 循环转换
解析: 通过初始化、条件、增量语句可等价转换。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限下面已按新模板 完整保留原题描述、输入输出格式、样例及数据范围,并在「解题思路」中用 孩子易懂的语言 重新讲解,方便练习。
三、编程题(每题25分,共50分)
1. 字母求和
题目描述
小杨同学发明了一种新型密码:
- 每个 小写字母 代表它在字母表中的位置(a=1,b=2…z=26)。
- 每个 大写字母 代表它的 ASCII 码的相反数(A=−65,B=−66…Z=−90)。
例如字符串 aAc 对应的整数为
1(a) + (−65)(A) + 3(c) = −61。
给定一个仅含大小写字母的加密字符串,请计算出加密前的整数。
输入格式
第一行:一个正整数 n,表示字符串长度(1 ≤ n ≤ 100 000)。
第二行:一个仅含大小写英文字母的字符串 T。
输出格式
输出一行一个整数,表示加密前的整数。
样例输入1
text
3
aAc1
2
2
样例输出1
text
-611
样例解释1
- 'a' → 1
- 'A' → −65
- 'c' → 3
总和 1 − 65 + 3 = −61
数据范围
1 ≤ n ≤ 100 000
字符串仅由大小写英文字母组成。
解题思路
查看解题思路
- 读入字符串长度和字符串。
- 逐字母扫描:
- 如果是 小写字母,把它变成数字 1~26;
- 如果是 大写字母,把它变成负数 −65~−90。
- 累加所有数字,最后输出总和。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <iostream>
using namespace std;
const int N = 100005;
char str[N];
int main() {
int n;
cin >> n >> str;
long long ans = 0; // 防止大数
for (int i = 0; i < n; ++i) {
if (str[i] >= 'a' && str[i] <= 'z')
ans += str[i] - 'a' + 1; // 小写:1~26
else
ans -= str[i]; // 大写:-65~-90
}
cout << ans << endl;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 完全平方数
题目描述
给定 n 个非负整数,统计有多少对 不同下标 (i, j) 满足
- 1 ≤ i < j ≤ n
- A[i] + A[j] 是一个完全平方数(即存在整数 y,使得 y² = A[i] + A[j])
输入格式
第一行:一个非负整数 n(1 ≤ n ≤ 1000)。
第二行:n 个非负整数 A₁, A₂, …, Aₙ(0 ≤ Aᵢ ≤ 100 000)。
输出格式
一行一个非负整数,表示满足条件的对数。
样例输入1
text
5
1 4 3 3 51
2
2
样例输出1
text
31
样例解释1
- 1 + 3 = 4(= 2²)
- 4 + 5 = 9(= 3²)
- 3 + 3 = 6(不是平方数,不计)
- 3 + 5 = 8(不是平方数,不计)
共 3 对满足条件。
数据范围
1 ≤ n ≤ 1000
0 ≤ Aᵢ ≤ 100 000
解题思路
查看解题思路
- 双重循环枚举所有不同的两个数。
- 计算和并判断是否为完全平方数:
- 先开平方根
t = sqrt(s),再检查t*t == s。
- 先开平方根
- 满足就计数,最后输出总数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N];
int main() {
int n; cin >> n;
for (int i = 1; i <= n; ++i) cin >> a[i];
int ans = 0;
for (int i = 1; i <= n; ++i)
for (int j = i + 1; j <= n; ++j) {
int s = a[i] + a[j];
int t = sqrt(s + 1e-7); // 四舍五入
if (t * t == s) ++ans;
}
cout << ans << endl;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限